# 题目1：画出下面代码每一行的引用情况
# a = 1
# b = a
# a = 2

# a = 1 b = a  图
#================================
#= a  0x000001  =     1 0x000001=
#= b  0x000001  =               =
#= ==============================

# b = a a = 2 图
#================================
#= a  0x000002  =     1 0x000001=
#= b  0x000001  =     2 0x000002=
#= ==============================


# 题目2：画出下面代码每一行的引用情况
def test(num):
    num = num + 1
    result = "hello"
    return result
a = 10
r = test(a)
#====================================
#= a      0x000010  =    10 0x000010=
#= num    0x000010  =    11 0x000011=
#= test   0x177777  = hello 0x188888=
#= num+1  0x000011  =               =
#= result 0x188888  =               =
#= return 0x199999  =               =
#= ==================================

# 题目3：画出下面代码的内存情况
# a = 1
# a = "hello"
# result = a.split("e")
# a = [1, 2, 3]
# a.append(5)
# a = [3, 2, 1]

# a = 1 图
#====================================
#= a      0x000001  =     1 0x000001=
#= ==================================

# a = "hello" 图
#====================================
#= a      0x188888  =     1 0x000001=
#= test   0x177777  = hello 0x188888=
#= ==================================

# result = a.split("e") 图

#================================================
#= a      0x199999  = 0x199999列表引用地址      =
#=                  = 0x199999       h          =
#=                  = 0x199999       l          =
#=                  = 0x199999       l          =
#= result 0x199999  = 0x199999       o          =
#= ==============================================

# a = [1, 2, 3]

#================================================
#= a      0x199999  = 0x199999列表引用地址      =
#=                  = 0x199999       1          =
#=                  = 0x199999       2          =
#=                  = 0x199999       3          =
#= result 0x199999  =                           =
#= ==============================================


# a.append(5)
#================================================
#= a      0x199999  = 0x199999列表引用地址      =
#=                  = 0x199999       1          =
#=                  = 0x199999       2          =
#=                  = 0x199999       3          =
#= result 0x199999  = 0x199999       5          =
#= ==============================================
# a = [3, 2, 1]
#================================================
#= a      0x199999  = 0x199999列表引用地址      =
#=                  = 0x199999       3          =
#=                  = 0x199999       2          =
#=                  = 0x199999       1          =
#= result 0x199999  =                           =
#= ==============================================


#====================================
#= a      0x188888  =     1 0x000001=
#= num    0x000010  =    11 0x000011=
#= test   0x177777  = hello 0x188888=
#= num+1  0x000011  =               =
#= result 0x188888  =               =
#= return 0x199999  =               =
#= ==================================


# 题目4：有代码如下：
def demo1():	# 1

    num = 10    # 2
    num = 20    # 3


def demo2():      # 4
    global num
    num = 100     # 5

demo1()
# 6
num = 50
demo2() # 7

print(num)

# 问题1：说说1 2 3 4 5 处num的值分别是多少，可以得出什么结论
   #1 什么都没有， #2 赋值为 10 #3 赋什为 20 #4 什么也没有 #赋值为 100
# 问题2：在def demo1():上面写一行代码 num = 20,说说1 2 3 4 5 处num的值分别是多少，可以得出什么结论
# 各处值 不变
# 问题3：在6出增加一行代码num = 50 说说1 2 3 4 5 处num的值分别是多少，可以得出什么结论
# 各处值 不变
# 问题4：如何让demo1和demo2中可以修改全局变量num的值，修改之后，7处num的值是多少
# 在 demo1 demo2 中， 使用变量num 前，添加代码 global 修饰变量 num

# 题目5：返回值相关的题目
# 1、定义一个函数实现一个功能，传递一个存数字的列表到函数中，计算出所有元素的和。
#    调用函数得到结果，判断和是否是3的倍数，并打印出对应的结论
# 2、定义一个函数，接收两个参数，第一个参数是列表，第二个参数不限制，函数所实现的功能是
#    判断第一个参数列表中是否存在第二个参数这个元素，
#    如果存在，则什么事情都不做，如果不存在则将第二个参数追加到列表的后边
# 3、定义一个函数，接收一个参数，这个参数是一个数字列表。功能是得到一个新的列表
# ，新列表中的每一个元素是旧列表中的对应元素乘以5


def list_sum(a):
    sum1 = 0
    for i in a:
        sum1 += i
        if i % 3 == 0:
            print("%d是3的倍数" % i)
    print("列表元素和是：%d" % sum1)


list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
list_sum(list1)


def list_if(a, b):
    if b not in a:
        # print(str(b)+"在列表中")
        a.append(b)
    print(a)


list_if(list1, 15)

def list_by(a):
    b = []
    for i in a:
        b.append(i*5)
    print(b)
list_by(list1)


#=================================================================
#拓展
# 题目1：
def print_info(name, title="", gender=True):
    gender_text = "男生"
    if not gender:
        gender_text = "女生"
    print("%s%s 是 %s" % (title, name, gender_text))
# 分别说说下面几个方法调用，控制台最终打印的结果
print_info("小明")
# 小明是男生
print_info("老王", title="班长")
#班长老王是男生
print_info("老王", "班长")
#班长老王是男生
print_info("小美", False)
#False小美 是 男生

# 题目2：
# 说说下面代码实参和形参的对应关系
def demo(num1, num2, *args, **kwargs):
	pass
demo(1, 2, 3, 4, 5, name="小明", age=18, gender=True)
#num1 = 1 num2 =2   *args = [3,4,5]  **kwargs = {"name":"小明", "age":18, "gender":True}